package com.ihr360.payroll.service.attendanceplan;

import com.ihr360.commons.model.type.WorkHourType;
import com.ihr360.commons.request.Ihr360SearchBody;
import com.ihr360.payroll.model.dto.attendance.plan.AttendancePlan;
import com.ihr360.payroll.model.dto.salary.plan.SalaryPlan;
import com.ihr360.rest.service.SimpleRestService;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 考勤记薪方案
 *
 * @author tomtao
 */
public interface AttendancePlanService extends SimpleRestService<AttendancePlan, Long> {

    /**
     * 保存
     *
     * @param entity
     * @return
     */
    AttendancePlan save(AttendancePlan entity);

    /**
     * 保存系统模板
     *
     * @param attendancePlan
     * @return
     */
    AttendancePlan saveSystemTemplate(AttendancePlan attendancePlan);

    /**
     * 校验名称是否重复
     *
     * @param name
     * @param id
     * @return
     */
    boolean isDuplicateName(String name, Long id);

    /**
     * 校验系统模板名称是否重复
     *
     * @param name
     * @param id
     * @return
     */
    boolean isDuplicateNameSystemTemplate(String name, Long id);

    /**
     * 获取公司下所有配置列表
     *
     * @return
     */
    List<AttendancePlan> list();

    /**
     * 校验方案是否被其他配置引用
     *
     * @param id
     * @param haveEnable
     * @return
     */
    boolean isReferenced(Long id, boolean haveEnable);

    /**
     * 获取帐期内的方案
     *
     * @param companyId
     * @param id
     * @return
     */
    List<SalaryPlan> getIsPayPeriodSalaryPlanList(String companyId, Long id);

    /**
     * 改变方案工时类型
     *
     * @param id
     * @param type
     * @return
     */
    boolean changeWorkHourType(Long id, WorkHourType type);

    /**
     * 改变系统模板方案工时类型
     *
     * @param id
     * @param type
     * @return
     */
    boolean changeSystemTemplateWorkHourType(Long id, WorkHourType type);

    /**
     * 查询系统模板列表
     *
     * @param searchBody
     * @return
     */
    Page<AttendancePlan> searchSystemTemplate(Ihr360SearchBody<AttendancePlan> searchBody);

    /**
     * 根据Id 获取一个系统模板
     *
     * @param id
     * @return
     */
    AttendancePlan getOneSystemTemplate(Long id);

    /**
     * 删除系统模板
     *
     * @param id
     * @return
     */
    boolean deleteSystemTemplateById(Long id);

    /**
     * 删除方案
     *
     * @param id
     * @return
     */
    boolean deleteById(Long id);

    /**
     * 获取考勤计薪方案,包含系统模板
     *
     * @param id
     * @return
     */
    AttendancePlan getOneContainSystemTemplate(Long id);

    /**
     * 克隆考勤计薪资规则
     *
     * @param id
     * @return
     */
    AttendancePlan cloneAttendancePlan(Long id);

    /**
     * 获取系统模板Id
     *
     * @return
     */
    List<Long> getSystemTemplateIdList();

}
